package com.springboot.search.common.result;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
public final class Result<D> {
    /**
     * 0:失败 1:成功
     */
    private int code;

    /**
     * 返回的消息
     */
    private String msg;

    /**
     * 各种类型的数据
     */
    private D data;

    private Result(final int code, final String msg, final D data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    /**
     * 以msg和data创建返回类型为success的对象
     *
     * @param msg
     * @param data
     * @param <D>
     * @return
     */
    public static <D> Result success(final String msg, final D data) {
        return new Result<>(1, msg, data);
    }

    /**
     * 以data创建返回类型为success的对象
     *
     * @param data
     * @param <D>
     * @return
     */
    public static <D> Result success(final D data) {
        return new Result<>(1, "成功", data);
    }

    public static Result success() {
        return new Result<>(1, "成功", null);
    }

    /**
     * 以msg创建返回类型为fail的对象
     *
     * @param msg
     * @param <D>
     * @return
     */
    public static <D> Result fail(final String msg) {
        return new Result<>(0, msg, null);
    }

    /**
     * 以msg和data创建返回类型为fail的对象
     *
     * @param msg
     * @param <D>
     * @return
     */
    public static <D> Result fail(final String msg, final D data) {
        return new Result<>(0, msg, data);
    }

}

